Skip to content

La tinta de la variante de marca se deriva del relleno, no se fija - #20

Merged
A-PachecoT merged 1 commit into
mainfrom
fix/primary-foreground-derives-617
Aug 22, 2026
Merged

La tinta de la variante de marca se deriva del relleno, no se fija#20
A-PachecoT merged 1 commit into
mainfrom
fix/primary-foreground-derives-617

Conversation

@A-PachecoT

Copy link
Copy Markdown
Contributor

Button/Badge variant="default" pintaban bg-[var(--primary)] text-white.

El relleno es reasignable por la app que consume el paquete. Fovente ata
--primary al color que el cliente elige en Ajustes → Marca, así que el
relleno era variable y la tinta encima constante: sobre un relleno claro el
rótulo desaparece.

Medido en el DOM vivo

Chromium real, ratio compuesto sobre el fondo apilado de verdad (no aritmética
de tokens), en la app de Fovente:

caso par ratio AA 4.5
tema oscuro, marca Fovente #FFFFFF sobre #D98D7D 2.61
tema claro, marca amarilla de cliente #FFFFFF sobre #F2C230 1.68
tema claro, marca Fovente #FFFFFF sobre #AC4A3A 5.53

El segundo no es hipotético: es el estado actual de cualquier tenant con una
marca clara, en toda acción primaria de la app.

El cambio

text-whitetext-[var(--primary-foreground)], sólo en la variante
default de Button y Badge.

Por qué esto NO mueve nada en TimelyAI ni en Landing

src/styles/index.css ya declara --primary-foreground: #ffffff en los dos
temas (líneas 102 y 281). Quien no lo reasigne obtiene exactamente el mismo par
que antes — el cambio es un no-op visual. Quien sí lo reasigne (hoy sólo
Fovente) obtiene una tinta que sigue al relleno.

Lo que deliberadamente NO cambia

Las variantes secondary, destructive, las de estado y las de canal
conservan text-white. Sus rellenos son colores fijos del sistema, no de
marca, y su par ya estaba verificado. El test afirma esa mitad también, para
que un barrido futuro de text-white no se lleve la distinción por delante.

Test

src/__tests__/components/brand-ink-derives.test.tsx. Se corrió contra la
versión rota primero: falló 2 de 3, con el control de no-vacuidad en verde. Un
test que nunca se vio en rojo no prueba nada.

Estado de la suite

npm test → 503 passed / 1 failed. El fallo es ChatInput.test.tsx («should
render send button»), y es preexistente: se reproduce sobre main limpio,
sin este cambio.

Orden de aterrizaje

Este PR va primero. El de inbox-ai (que remapea --primary al color del
tenant) depende de él: si aterriza al revés, los tenants con marca clara pasan
de tener el problema en 8 sitios parchados a tenerlo en todos.

Ref: cofoundy/inbox-ai#617

…fija

`variant="default"` pintaba `bg-[var(--primary)] text-white`. El relleno es
reasignable por la app que consume el paquete —Fovente lo ata al color que el
cliente elige en Ajustes → Marca— y la tinta era una constante, así que sobre
un relleno claro el rótulo desaparecía.

Medido en el DOM vivo de Fovente (Chromium, ratio compuesto sobre el fondo
real apilado):

  · tema oscuro, marca por defecto:  blanco sobre #D98D7D = 2.61:1  ✗ AA
  · tema claro, marca amarilla:      blanco sobre #F2C230 = 1.68:1  ✗ AA

`--primary-foreground` ya existe en `styles/index.css` y vale `#ffffff` en los
dos temas, así que para quien no lo reasigne (TimelyAI, Landing) esto no mueve
un píxel: el par sigue siendo exactamente el mismo. Para quien sí lo reasigne,
la tinta pasa a seguir al relleno.

Las demás variantes conservan `text-white` a propósito: `--secondary`,
`--destructive` y las de estado/canal son colores FIJOS del sistema, no de
marca, y su par ya está verificado. El test lo afirma explícitamente para que
un barrido de `text-white` no se lleve puesta esa distinción.

`brand-ink-derives.test.tsx` se escribió contra la versión rota primero y falló
ahí (2 de 3), con el control de no-vacuidad en verde.

Nota: `ChatInput.test.tsx` falla en `main` desde antes de este cambio —
reproducido sobre el árbol limpio.

Ref: cofoundy/inbox-ai#617
@A-PachecoT
A-PachecoT merged commit 09ab157 into main Aug 22, 2026
1 check failed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant